#include <bits/stdc++.h>
using namespace std;

int T;
int n,m,L,V;
int d[100005],v[100005],a[100005];
int p[100005];
bool b[100005];
int maxx=-1e9;
vector<pair<int,int>> ve;

void solve(int x)
{
    if(a[x]>0)
    {
        double vt=sqrt(pow(v[x],2)+2*a[x]*(L-d[x]));
        if(vt>V)
        {
            double s=v[x]*((V-v[x])/a[x])+0.5*a[x]*pow(((V-v[x])/a[x]),2);
            s+=d[x];
            if(s<=maxx) for(int i=1;i<=m;i++) if(p[i]>=s) {ve.push_back(make_pair(x,i));break;}
        }
    }
    else if(a[x]==0)
    {
        if(v[x]>V)
        {
            double s=d[x];
            if(s<=maxx) for(int i=1;i<=m;i++) if(p[i]>=s && a[i]<=L) {ve.push_back(make_pair(x,i));break;}
        }
    }
    else
    {
        double s=v[x]*((V-v[x])/a[x])+0.5*a[x]*pow(((V-v[x])/a[x]),2);
        for(int i=1;i<=m;i++)
        {
            if(p[i]>=d[x] && p[i]<=d[x]+s)
            {
                ve.push_back(make_pair(x,i));
                break;
            }
        }
    }
}

int main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    cin>>T;
    while(T--)
    {
        while(!ve.empty()) ve.pop_back();
        cin>>n>>m>>L>>V;
        for(int i=1;i<=n;i++)
        {
            cin>>d[i]>>v[i]>>a[i];
        }
        for(int i=1;i<=m;i++)
        {
            cin>>p[i];
        }
        sort(p+1,p+m+1);
        maxx=p[m];
        for(int i=1;i<=n;i++)
        {
            solve(i);
        }
        cout<<ve.size()<<" ";
        for(int i=0;i<(int)ve.size();i++)
        {
            pair<int,int> pid;
            pid=ve[i];
            b[pid.second]=1;
        }
        int ans=0;
        for(int i=1;i<=m;i++)
        {
            if(b[m]==1) ans++;
        }
        cout<<m-ans;
    }
    return 0;
}